package pe.mutacion;


import pe.algenetico.MiRandom;
import pe.cromosoma.Cromosoma;

public class MutacionTipoUnico implements Mutacion{
	public Cromosoma[] mutacion(int tam_pob, int tam_elite, Cromosoma[] pob, MiRandom ran, double prob_mut){
		Cromosoma[] nuevaPob=new Cromosoma[tam_pob-tam_elite]; //TODO devuelve una poblacion... ARREGLAR
		boolean mutado;
		double prob;
		int l = pob[0].getLong_cromo();
		//Random r = new Random();
		for (int i=0;i<tam_pob-tam_elite;i++){
			mutado = false;
			for (int j=0;j<l;j++){
				// se genera un numero aleatorio en [0 1)
				//prob = r.nextDouble();
				prob = ran.r.nextDouble();
				// mutan los genes con prob<prob_mut
				if (prob<prob_mut){
					pob[i].setGenes(j,!( (pob[i].getGenes())[j]));
					mutado = true;
				}
			}
			if (mutado) pob[i].setAptitud(pob[i].evalua());
		}
		return nuevaPob;
	}
}
